package cn.tannn.surenessdemo.user.service;

import cn.tannn.surenessdemo.controller.dto.AddAuthRoleDTO;
import cn.tannn.surenessdemo.controller.dto.UpdateAuthRoleDTO;
import cn.tannn.surenessdemo.user.entity.AuthResource;
import cn.tannn.surenessdemo.user.entity.AuthRole;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Optional;

/**
 * @author tan
 * @date 2022-07-18 11:18:26
 */
public interface RoleService {

    /**
     * 确定角色是否已经存在
     * @param authRole role
     * @return existed-true no-false
     */
    boolean isRoleExist(AuthRole authRole);

    /**
     * 添加角色
     * @param authRole role
     * @return add success-true failed-false
     */
    boolean addRole(AddAuthRoleDTO authRole);

    /**
     * 更新角色
     * @param authRole role
     * @return success-true failed-false
     */
    boolean updateRole(UpdateAuthRoleDTO authRole);

    /**
     * 删除角色
     * @param roleCode role Code
     * @return success-true failed-false
     */
    boolean deleteRole(String roleCode);

    /**
     * 获取所有角色
     * @return role list
     */
    Optional<List<AuthRole>> getAllRole();

    /**
     * 分页获取角色
     * @param currentPage current page
     * @param pageSize page size
     * @return Page of roles
     */
    Page<AuthRole> getPageRole(Integer currentPage, Integer pageSize);


    /**
     * 获取此角色拥有的可分页资源
     * @param roleCode role code
     * @return List of resources
     */
    List<AuthResource> getResourceOwnRole(String roleCode);

    /**
     * 获取此角色不拥有的可分页资源
     * @param roleCode role Code
     * @return List of resources
     */
    List<AuthResource> getResourceNotOwnRole(String roleCode);

    /**
     * 将此资源授权给此角色
     * @param roleCode role Code
     * @param resourceCode resource Code
     */
    void authorityRoleResource(String roleCode, String resourceCode);


    /**
     * 将此资源授权给此角色
     * @param roleCode role Code
     * @param resourceCode resource Code
     */
    void authorityRoleResource(String roleCode, List<String> resourceCode);

    /**
     * 在此角色中取消对该资源的授权
     * @param roleCode role Code
     * @param resourceCode resource Code
     */
    void deleteAuthorityRoleResource(String roleCode, String resourceCode);

    /**
     * 将此路由（多个资源）授权给此角色
     * @param roleCode role Code
     * @param routeCode route Code
     */
    void authorityRoleRoute(String roleCode, String routeCode);


    /**
     * 将此路由（多个资源）的授权在此角色中删除
     * @param roleCode role Code
     * @param routeCode route Code
     */
    void deleteAuthorityRoleRoute(String roleCode, String routeCode);

    /**
     * 启用角色
     * @param roleCodes roleCodes
     */
    void enable(List<String> roleCodes);

    /**
     * 禁用角色
     * @param roleCodes roleCodes
     */
    void disabled(List<String> roleCodes);


}
